package com.ctshk.rpc.tour.service;

import java.util.List;

import com.ctshk.common.dto.Result;
import com.ctshk.common.model.PageResponse;
import com.ctshk.common.model.TokenUser;
import com.ctshk.rpc.tour.dto.SeriesTripDTO;
import com.ctshk.rpc.tour.dto.SeriesTripTouristTypeDTO;
import com.ctshk.rpc.tour.dto.TripBasicInformationDTO;
import com.ctshk.rpc.tour.dto.TripFileDTO;
import com.ctshk.rpc.tour.dto.cache.Trip;
import com.ctshk.rpc.tour.req.SeriesTripScheduleItineraryDayReq;
import com.ctshk.rpc.tour.req.TripListQueryReq;
import com.ctshk.rpc.tour.req.TripSupplementReq;
import com.ctshk.rpc.tour.req.trip.*;

/**
 * <p>
 * 系列团行程 服务类
 * </p>
 *
 * @author 谢诗宏
 * @since 2021-01-12
 */
public interface ISeriesTripService {

    /**
     * 查询线路基本资料
     *
     * @param id 行程id
     * @return 基本资料
     */
    TripBasicInformationDTO basicInformation(Long id);

    /**
     * 新增行程--补充资料
     *
     * @param tripSupplementReq 补充资料信息
     */
    void supplement(TripSupplementReq tripSupplementReq);

    /**
     * 查询补充资料
     *
     * @param id 行程id
     * @return 补充资料信息
     */
    TripSupplementReq tripSupplement(Long id);

    /**
     * 查询行程信息
     *
     * @param id 行程id
     * @return 行程信息
     */
    SeriesTripScheduleItineraryDayReq tripItineraryInformation(Long id);

    /**
     * 查询行程列表
     *
     * @param tripListQueryReq 查询行程列表
     * @param tokenUser        登录用户
     * @return 行程列表信息
     */
    PageResponse<SeriesTripDTO> tripList(TripListQueryReq tripListQueryReq, TokenUser tokenUser);
    
    /**
     * CMS查询行程列表
     * @param tripListQueryReq
     * @param
     * @return
     */
    PageResponse<SeriesTripDTO> queryCmsTripList(TripListQueryReq tripListQueryReq);

    /**
     * 修改行程状态
     *
     * @param updateStatusReq 修改行程状态
     * @param tokenUser       登录用户
     */
    void updateTripStatus(UpdateStatusReq updateStatusReq, TokenUser tokenUser);

    /**
     * 批量开售/批量禁售
     *
     * @param updateTripStatusReq 开售/禁售信息
     */
    void updateTripScheduleStatus(UpdateTripScheduleStatusReq updateTripStatusReq);

    /**
     * 文件上传
     *
     * @param addTripFileReq 文件属性
     * @param tokenUser      登录用户
     */
    void addTripFile(AddTripFileReq addTripFileReq, TokenUser tokenUser);

    /**
     * 查询行程档案管理
     *
     * @param id 行程id
     * @return 档案信息列表
     */
    List<TripFileDTO> tripFileList(Long id);

    /**
     * 查询行程档案管理
     *
     * @param id 行程id
     * @return 档案信息列表
     */
    List<FileReq> recordFileList(Long id);
    /**
     * 查询行程旅客类型列表
     *
     * @param id 行程id
     * @return 旅客类型列表
     */
    List<SeriesTripTouristTypeDTO> tripTouristType(Long id);

    /**
     * 根据标题和团号查询团信息
     *
     * @param tripListQueryReq 查询信息
     * @return 行程列表
     */
    List<SeriesTripDTO> tripScheduleList(TripListQueryReq tripListQueryReq, TokenUser tokenUser);

    /**
     * 线路审批接口
     *
     * @param tripApprovalReq 审批数据
     * @param tokenUser       用户登录属性
     */
    void approval(TripApprovalReq tripApprovalReq, TokenUser tokenUser);

    /**
     * 旅行团行程码是否已存在
     * @param tripCode
     * @return
     */
    Result<Boolean> isExistsTripCode(String tripCode);

    /**
     * 查询行程标题
     * @param tripId
     * @return
     */
    String findTripSubject(Long tripId);
    
    /**
     * 设置当季热点
     * @param tripId
     * @return
     */
    Result<Void> changeHot(String tripId, Long userId);

    /**
     * 查询行程业务类型
     * @param tripId
     * @return
     */
    Integer findTripBusinessTypeById(Long tripId);

    Trip queryTripById(Long tripId);

}
